#include "comm.hpp"

int main(){
    //生成唯一key值
    key_t k = getKey();
    //创建共享内存
    int shmid = createShm(k,gsize);
    //连接共享内存
    char* addr  = (char*)shmat(shmid,nullptr,0);

    //创建命名管道
    my_mkfifo(fifoname.c_str(),mode);
    //以读方式打开命名管道
    int rfd = my_open(fifoname.c_str(),O_RDONLY);

    //创建命名管道
    my_mkfifo(fifoname1.c_str(),mode);
    //以写方式打开命名管道
    int wfd = my_open(fifoname1.c_str(),O_WRONLY);

    char buffer[1024];
    while(true){
        buffer[0]=0;
        ssize_t n = read(rfd,buffer,sizeof(buffer)-1);
        if(n>0){
            //buffer[n]=0;
            printf("%s",buffer);
            fflush(stdout);
            //打印共享内存数据
            cout<< addr <<endl;

            char arr[]="server读完了,你可以继续写了\n";
            write(wfd,arr,sizeof(arr));
            
        }else if(n==0){
            cout<<"client quit me too"<<endl;
            break;
        }else{
            cout<<errno<<":"<<strerror(errno)<<endl;
            break;
        }

    }
    //关闭共享内存和命名管道
    close(rfd);
    unlink(fifoname.c_str());
    close(wfd);
    unlink(fifoname1.c_str());
    shmdt(addr);
    shmctl(shmid,IPC_RMID,nullptr);

    return 0;
}